package com.demo.java.OD551_600.OD554;

import java.util.Scanner;
import java.util.*;
import java.util.HashMap;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【报文回路(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146533409
 */
public class OdMain {
    public static void main(String[] args) {
        // 输入处理
        Scanner in = new Scanner(System.in);
        int n = Integer.parseInt(in.nextLine()); // 查询对的数量

        // 存储HOST和ROUTER的查询关系
        int[][] matrix = new int[n][2];
        for (int i = 0; i < n; i++) {
            String input_str = in.nextLine();
            String[] tmp2 = input_str.split(" ");
            int[] nums = new int[tmp2.length];
            for (int j = 0; j < tmp2.length; j++) {
                nums[j] = Integer.parseInt(tmp2[j]);
            }
            matrix[i][0] = nums[0]; // HOST
            matrix[i][1] = nums[1]; // ROUTER
        }

        // 使用哈希表存储查询关系
        HashMap<Integer, HashSet<Integer>> relations = new HashMap<>();
        for (int i = 0; i < n; i++) {
            if (!relations.containsKey(matrix[i][0])) {
                relations.put(matrix[i][0], new HashSet<>());
            }
            if (!relations.containsKey(matrix[i][1])) {
                relations.put(matrix[i][1], new HashSet<>());
            }
            relations.get(matrix[i][0]).add(matrix[i][1]);
        }

        // 检查双向反馈关系
        int flag = 0; // 标记是否存在不满足条件的查询对
        for (Integer num1 : relations.keySet()) {
            for (Integer num2 : relations.get(num1)) {
                if (!relations.get(num2).contains(num1)) {
                    flag = 1; // 若发现不存在双向反馈，标记并跳出
                    break;
                }
            }
            if (flag == 1) {
                break;
            }
        }

        // 输出结果
        if (flag == 0) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}